package elven.codingit.easyutil.common;

import java.util.ArrayList;
import java.util.List;

import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang3.StringUtils;
import org.dozer.DozerBeanMapper;

import elven.codingit.easyutil.dto.ReturnDto;
import elven.codingit.easyutil.dto.ReturnDto.Builder;

/**
 * 简单通用类
 * @author elven 2016年5月22日
 */
public class Utils {

	public static final DozerBeanMapper dozer = new DozerBeanMapper();
	
	/**
	 * 对象转换
	 * @param clazz 转换的目标类
	 * @param source 数据源类
	 * @return null | <T> T
	 * @author elven 2016年6月3日
	 */
	public static <T> T convert(Class<T> clazz, Object source){
		if(isNotNull(source)){
			return dozer.map(source, clazz);
		}
		return null;
	}

	/**
	 * 对象集合转换
	 * @param clazz 目标类Class
	 * @param source list源数据
	 * @return null | List
	 * @author elven 2016年6月3日
	 */
	public static <T> List<T> convert(Class<T> clazz, List source){
		if(isNotNull(source)){
			List list = new ArrayList();
			for(int i = 0; i < source.size(); i++){
				list.add(dozer.map(source.get(i), clazz));
			}
			return list;
		}
		return null;
	}
	
	public static boolean isNull(Object object){
		return object == null;
	}
	
	public static boolean isNotNull(Object object){
		return !isNull(object);
	}
	
	public static boolean isEmpty(CharSequence sequence){
		return StringUtils.isBlank(sequence);
	}
	
	public static boolean isNotEmpty(CharSequence sequence){
		return StringUtils.isNotBlank(sequence);
	}
	
	public static ReturnDto getSuccess(){
		return new ReturnDto.Builder(true).code("000000").message("success").build();
	}
	
	/**
	 * @param code 错误代码
	 * @param message 错误消息
	 * @author elven 2016年5月24日
	 */
	public static ReturnDto parseError(String code, String message){
		return new ReturnDto.Builder(false).code(code).message(message).build();
	}
	
	/**
	 * @param message 错误消息
	 * @author elven 2016年5月24日
	 */
	public static ReturnDto parseError(String message){
		return new ReturnDto.Builder(false).message(message).build();
	}
	
	public static Builder returnDto(boolean status){
		return new ReturnDto.Builder(status);
	}
	
	public static ReturnDto success(Object cont){
		return returnDto(true).content(cont).build();
	}
	
	public static ReturnDto success(){
		return returnDto(true).build();
	}
	
	public static ReturnDto error(String msg){
		return returnDto(false).message(msg).build();
	}
	
	public static String md5(String data){
		return DigestUtils.md5Hex(data);
	}
	
	public static String md5To16(String data){
		return md5(data).substring(8, 24);
	}
	
	public static String base64Encode(String data){
		return Base64.encodeBase64String(data.getBytes());
	}
	
	public static String base64Decode(String data){
		return new String(Base64.decodeBase64(data));
	}
	
}